package cn.walls1717.mall.modules.pms.service;

import cn.walls1717.mall.modules.pms.dto.PageListDTO;
import cn.walls1717.mall.modules.pms.dto.ProductCateChildrenDTO;
import cn.walls1717.mall.modules.pms.dto.ProductCateDTO;
import cn.walls1717.mall.modules.pms.model.PmsProductCategory;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 产品分类 服务类
 * </p>
 *
 * @author walls1717
 * @since 2022-04-09
 */
public interface PmsProductCategoryService extends IService<PmsProductCategory> {

    /**
     * 产品分类展示
     * @param pageListDTO 分页数据传输对象
     * @return 分页数据
     */
    Page<PmsProductCategory> pageList(PageListDTO pageListDTO);

    /**
     * 添加商品分类
     * @param productCateDTO 商品分类与商品类型参数ids数据传输对象
     * @return 是否保存成功
     */
    boolean createCategory(ProductCateDTO productCateDTO);

    /**
     * 编辑商品分类（同步删除关系表中的数据，并重新添加）
     * @param id 待编辑数据id
     * @param productCateDTO 数据传输对象
     * @return 是否编辑成功
     */
    boolean updateCategory(Long id, ProductCateDTO productCateDTO);

    /**
     * 删除商品分类（删除时同时删除关系表中的数据）
     * @param id 待删除数据id
     * @return 是否删除成功
     */
    boolean deleteCategory(Integer id);

    /**
     * 修改导航栏和是否显示的状态
     * @param ids 支持批量修改
     * @param pmsProductCategory 临时存储对应状态的对象
     * @return 是否修改成功
     */
    boolean updateNavAndShowStatus(List<Long> ids, PmsProductCategory pmsProductCategory);

    /**
     * 商品列表页面，展示商品类型级联菜单
     * @return 商品类型级联数据
     */
    List<ProductCateChildrenDTO> withChildren();

}
